草庐IT

C++ 对和指针

全部标签

c++ - 将字符指针 (char*) 转换为结构

我有一个结构://Custompacketstructure.structUserPacket{__int64pingTime;}CustomPacket;我已经想出了如何将它转换为char*。现在我想将char*转换回结构。有什么建议吗? 最佳答案 如果是C++:char*theCharPtr;//hasyourconverteddataUserPacket*fromChar=reinterpret_cast(theCharPtr); 关于c++-将字符指针(char*)转换为结构,我

c++ - 我应该返回一个迭代器还是一个指向 STL 容器中元素的指针?

我正在开发一个用于将现有代码移植到不同平台的引擎。现有代码是使用第三方API开发的,我的引擎将根据我的新平台重新定义这些第三方API函数。以下定义来自API:typedefunsignedlongshape_handle;shape_handlemake_new_shape(inttype);我需要重新定义make_new_shape并且我可以选择重新定义shape_handle。我已经定义了这个结构(简化):structShape{inttype};make_new_shape的调用者不关心Shape的底层结构,它只需要一个“句柄”,这样它就可以调用如下函数:void`set_sha

c++ - 复制指针 vector

我有一个std::vector我需要使用A::Clone()将其深度复制到另一个vector.我想知道我是否可以使用for_each而不是使用手写循环或任何标准库算法。 最佳答案 合适的算法是std::transform您可以使用std::mem_fun将成员函数调用转换为一元仿函数例子:#include#include#include#includeclassX{public:X*clone();};intmain(){std::vectorvec1,vec2;std::transform(vec1.begin(),vec1.en

c++ - 指向 vector 的指针

我有这个代码:#include#include#includeusingnamespacestd;vector*vecptr;intveclen;voidgetinput(){stringtemp;for(inti=0;i>temp;vecptr->push_back(temp);}veclen=vecptr->size();}intmain(){getinput();for(inti=0;i我的编译器(G++)抛出一些错误:test2.cpp:28:17:error:nomatchfor'operator怎么了?我该怎么做才能修复它? 最佳答案

c++ - 作用域和 C++ 指针

我有以下代码:usingnamespacestd;vectorv;{strings="hello";v.push_back(&s);}{stringss="goodbye";v.push_back(&ss);}coutc_str()c_str()打印goodbyegoodbye如果我删除范围括号,代码将打印hellogoodbye当我离开第一个作用域时究竟发生了什么,指向第一个字符串的指针现在指向第二个? 最佳答案 存储的指针在作用域之后变成悬挂指针,任何读取它们指向的内容的尝试都会产生未定义的行为。

C++将字符串转换为空指针

我使用的库具有回调函数,其中一个参数的类型为void*。(我想允许发送任何类型的值。)我需要传递一个字符串(std::string或char[]是一样的)。我该怎么做? 最佳答案 如果您确定该对象在函数的生命周期内处于事件状态(并且可以修改),您可以对字符串指针进行强制转换,在回调中将其转回引用:#include#includevoidCallback(void*data){std::string&s=*(static_cast(data));std::cout(&s));return0;}输出是Hello,Callback!

c++ - 如何将静态二维数组的指针传递给结构/类?

当我尝试将数组指针(其中包含程序中某些函数所需的参数)传递给结构时遇到问题,然后应将其传递给那些函数。例如GSL要我以这种方式传递参数。一个小示例程序如下所示:#includeusingnamespacestd;structmyparams{double*a;double**b;};intmain(){doublec[10]={0,1,2,3,4,5,6,7,8,9};doubled[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};double**e=newdouble*[4];for(inti=0;i有什么问题params.b=d编译器提示“无法

c++ - 指针的初始化

我目前对以下语句感到困惑-我虽然该语句会在编译时产生错误,但它不会。//statement1:someclass*q(someclass());如果是这样的话我明白了//statement2:someclass*q(&someclass());我想知道为什么声明1不会产生错误,或者即使它是有效的(我在幕后遗漏了什么吗?) 最佳答案 Iwouldliketoknowwhystatment1doesntgenerateanerrororevenifthatisvalid第一个语句是有效的,尽管它可能没有按照您的预期进行:此语句声明了一个

C++ 指向函数返回时超出范围的对象的指针 - 为什么这样做有效?

这两个对get_string和get_string2的调用都会返回在函数返回时超出范围的对象。返回的对象不应该是函数返回后超出范围的内存地址吗?这是使用VisualStudio2008。这应该始终有效吗?为什么?#includeenummyID{SMALL,MEDIUM,LARGE};constchar*get_string(myIDid){switch(id){caseSMALL:return"small";caseMEDIUM:return"medium";caseLARGE:return"large";default:return"unknown";}}constchar*get

c++ - C++中的指针和动态分配的数组

我正在努力在脑海中弄清楚这一点。int*arrayA=newint[3];intarrayB[3]={1,2,3}arrayA=arrayB;arrayB的值是否被复制到arrayA?还是arrayA成为指向arrayB的指针? 最佳答案 Nakednew是evil,特别是对于数组。如果需要动态数组,请使用std::vector,如果需要静态数组,请使用std::array。1现在实际的答案很简单。arrayA是一个指针。所以它指向arrayB。这具有额外的效果:你现在泄露了分配的指针。尝试删除arrayA现在会崩溃或发生其他令人不